// 图的广度优先遍历算法
// 1. 新建一个队列，把根节点入队
// 2. 队头出列访问
// 3. 把队头的没有访问过的相邻节点入队
const graph = {
    0: [1,2],
    1: [2],
    2: [0,3],
    3: [3]
}

const visited = new Set()
const bfs = (root) => {
    const queue = [root]
    visited.add(root)
    while(queue.length > 0) {
        const n = queue.shift()
        console.log(n)
        graph[n].forEach(c => {
            if (!visited.has(c)) {
                queue.push(c)
                visited.add(c)
            } 
        })
    }
}

bfs(2)